<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="win firefox firefox3 gecko gecko1" dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>


<title>SKI combinator calculus - Wikipedia, the free encyclopedia</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="generator" content="MediaWiki 1.16alpha-wmf">
<link rel="alternate" type="application/x-wiki" title="Edit this page" href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit">
<link rel="edit" title="Edit this page" href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit">
<link rel="stylesheet" type="text/css" href="SKI_combinator_calculus_arquivos/combined.css">
<link rel="stylesheet" type="text/css" href="SKI_combinator_calculus_arquivos/jquery-ui-1.css">
<link rel="apple-touch-icon" href="http://en.wikipedia.org/apple-touch-icon.png">
<link rel="shortcut icon" href="http://en.wikipedia.org/favicon.ico">
<link rel="search" type="application/opensearchdescription+xml" href="http://en.wikipedia.org/w/opensearch_desc.php" title="Wikipedia (en)">
<link rel="copyright" href="http://creativecommons.org/licenses/by-sa/3.0/">
<link rel="alternate" type="application/rss+xml" title="Wikipedia RSS Feed" href="http://en.wikipedia.org/w/index.php?title=Special:RecentChanges&amp;feed=rss">
<link rel="alternate" type="application/atom+xml" title="Wikipedia Atom Feed" href="http://en.wikipedia.org/w/index.php?title=Special:RecentChanges&amp;feed=atom">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/shared.css" type="text/css" media="screen">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/commonPrint.css" type="text/css" media="print">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/main.css" type="text/css" media="screen">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/main_002.css" type="text/css" media="handheld">
<!--[if lt IE 5.5000]><link rel="stylesheet" href="/skins-1.5/monobook/IE50Fixes.css?248z2" type="text/css" media="screen" /><![endif]-->
<!--[if IE 5.5000]><link rel="stylesheet" href="/skins-1.5/monobook/IE55Fixes.css?248z2" type="text/css" media="screen" /><![endif]-->
<!--[if IE 6]><link rel="stylesheet" href="/skins-1.5/monobook/IE60Fixes.css?248z2" type="text/css" media="screen" /><![endif]-->
<!--[if IE 7]><link rel="stylesheet" href="/skins-1.5/monobook/IE70Fixes.css?248z2" type="text/css" media="screen" /><![endif]-->
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/index_003.css" type="text/css" media="all">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/index_005.css" type="text/css" media="print">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/index_002.css" type="text/css" media="handheld">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/index_004.css" type="text/css" media="all">
<link rel="stylesheet" href="SKI_combinator_calculus_arquivos/index.css" type="text/css" media="all">
<script type="text/javascript">
var skin="monobook",
stylepath="/skins-1.5",
wgArticlePath="/wiki/$1",
wgScriptPath="/w",
wgScriptExtension=".php",
wgScript="/w/index.php",
wgVariantArticlePath=false,
wgActionPaths={},
wgServer="http://en.wikipedia.org",
wgCanonicalNamespace="",
wgCanonicalSpecialPageName=false,
wgNamespaceNumber=0,
wgPageName="SKI_combinator_calculus",
wgTitle="SKI combinator calculus",
wgAction="view",
wgArticleId=1232841,
wgIsArticle=true,
wgUserName=null,
wgUserGroups=null,
wgUserLanguage="en",
wgContentLanguage="en",
wgBreakFrames=false,
wgCurRevisionId=326827661,
wgVersion="1.16alpha-wmf",
wgEnableAPI=true,
wgEnableWriteAPI=true,
wgSeparatorTransformTable=["", ""],
wgDigitTransformTable=["", ""],
wgMainPageTitle="Main Page",
wgFormattedNamespaces={"-2": "Media", "-1": "Special", "0": "", "1": "Talk", "2": "User", "3": "User talk", "4": "Wikipedia", "5": "Wikipedia talk", "6": "File", "7": "File talk", "8": "MediaWiki", "9": "MediaWiki talk", "10": "Template", "11": "Template talk", "12": "Help", "13": "Help talk", "14": "Category", "15": "Category talk", "100": "Portal", "101": "Portal talk"},
wgNamespaceIds={"media": -2, "special": -1, "": 0, "talk": 1, "user": 2, "user_talk": 3, "wikipedia": 4, "wikipedia_talk": 5, "file": 6, "file_talk": 7, "mediawiki": 8, "mediawiki_talk": 9, "template": 10, "template_talk": 11, "help": 12, "help_talk": 13, "category": 14, "category_talk": 15, "portal": 100, "portal_talk": 101, "wp": 4, "wt": 5, "image": 6, "image_talk": 7},
wgMWSuggestTemplate="http://en.wikipedia.org/w/api.php?action=opensearch\x26search={searchTerms}\x26namespace={namespaces}\x26suggest",
wgDBname="enwiki",
wgSearchNamespaces=[0],
wgMWSuggestMessages=["with suggestions", "no suggestions"],
wgRestrictionEdit=[],
wgRestrictionMove=[],
wgTrackingToken="820570fde7e76f08052b97f5827aa5d7",
wgClickTrackingIsThrottled=true,
wgNotice="",
wgNoticeLocal="";
</script>
<script src="SKI_combinator_calculus_arquivos/wikibits.js" type="text/javascript"></script>
<script src="SKI_combinator_calculus_arquivos/ajax.js" type="text/javascript"></script>
<script src="SKI_combinator_calculus_arquivos/mwsuggest.js" type="text/javascript"></script>
<script type="text/javascript" src="SKI_combinator_calculus_arquivos/js2.js"></script>
<script type="text/javascript" src="SKI_combinator_calculus_arquivos/plugins.js"></script>
<script type="text/javascript" src="SKI_combinator_calculus_arquivos/CollapsibleTabs.js"></script>
<script type="text/javascript" src="SKI_combinator_calculus_arquivos/ClickTracking.js"></script>
<script type="text/javascript" src="SKI_combinator_calculus_arquivos/centralnotice.js"></script><style type="text/css">
#centralNotice .siteNoticeSmall{display:none;}
#centralNotice .siteNoticeSmallAnon{display:none;}
#centralNotice .siteNoticeSmallUser{display:none;}
#centralNotice.collapsed .siteNoticeBig{display:none;}
#centralNotice.collapsed .siteNoticeSmall{display:block;}
#centralNotice.collapsed .siteNoticeSmallUser{display:block;}
#centralNotice.collapsed .siteNoticeSmallAnon{display:block;}
#centralNotice.anonnotice .siteNoticeSmallUser{display:none !important;}
#centralNotice.usernotice .siteNoticeSmallAnon{display:none !important;}
</style>


<!--[if lt IE 7]><script type="text/javascript" src="/skins-1.5/common/IEFixes.js?248z2"></script>
	<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
<script src="SKI_combinator_calculus_arquivos/index_002.php" type="text/javascript"></script><script type="text/javascript" src="SKI_combinator_calculus_arquivos/index.php"></script>

<style type="text/css"> .siteNoticeBig .notice-thermometer-fill { width: 90px; } .siteNoticeBig .notice-thermometer-base { width: 316px; }</style><style type="text/css">#bodyContent { position:relative; } 
.topicon { position:absolute; top:-2em !important;}
#coordinates{ position:absolute; top:1px !important; }</style></head><body class="mediawiki ltr ns-0 ns-subject page-SKI_combinator_calculus skin-monobook">
	<div id="globalWrapper">
		<div id="column-content">
	<div id="content">
		<a id="top"></a>
		<div id="siteNotice"><script type="text/javascript">if (wgNotice != '') document.writeln(wgNotice);</script><div id="centralNotice" class="expanded anonnotice"><style type="text/css">
/* Styles for Notices */
.notice-all a {
 text-decoration: none;
}
.notice-all a:hover span {
 text-decoration: underline;
}
div.notice-all div, div.notice-all span {
 margin: 0 !important;
}
.notice-pitch {
 display: inline-block;
 background-color: transparent;
 margin: 1.15em 0em;
}
.notice-pitch-text {
 float: left;
 overflow: visible;
 font-family: sans-serif;
 font-size: 1em;
 line-height: 1.5em;
 padding: 0.75em !important;
 cursor: pointer;
 font-weight: bold;
}
.notice-pitch-text-big {
 font-size: 1.5em;
}
.notice-slogan {
 color: #6E98C2;
 font-weight: bold;
 padding-right: 1em;
}
.siteNoticeBig {
 position: relative;
 float: left;
 width: 100%;
 border: solid 1px silver;
 background-color: #f3f3f3;
 margin-bottom: 1em;
}
 .siteNoticeBig .notice-toggle {
  position: absolute;
  top: 0em;
  right: 0.5em;
  font-size: 0.75em;
 }
 .siteNoticeBig .notice-button {
  position: absolute;
  bottom: 0.5em;
  right: 0.5em;
  height: 28px;
  text-align: center;
  background-color: transparent;
 }
 .siteNoticeBig .notice-button-start {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/button.png);
  background-position: left top;
  width: 12px;
  height: 28px;
 }
 .siteNoticeBig .notice-button-end {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/button.png);
  background-position: right bottom;
  width: 12px;
  height: 28px;
 }
 .siteNoticeBig .notice-button a {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/button.png);
  background-position: center center;
  background-repeat: repeat-x;
  font-family: sans-serif;
  font-size: 1em;
  font-weight: bold;
  color: white;
  line-height: 28px;
  height: 28px;
 }
 .siteNoticeBig .notice-thermometer {
  height: 21px;
  width: 450px;
  margin-top: 0.75em !important;
 }
 .siteNoticeBig .notice-thermometer-start {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/thermometer.png);
  background-position: left top;
  width: 10px;
  height: 21px;
 }
 .siteNoticeBig .notice-thermometer-fill {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/thermometer.png);
  background-position: left -21px;
  height: 21px;
  color: white;
  font-weight: bold;
  text-align: right;
  line-height: 21px;
  overflow: hidden;
 }
 .siteNoticeBig .notice-thermometer-transition {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/thermometer-transition.png);
  height: 21px;
  width: 24px;
 }
 .siteNoticeBig .notice-thermometer-base {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/thermometer.png);
  background-position: left 42px;
  height: 21px;
  color: #3474b5;
  font-weight: bold;
  text-align: right;
  line-height: 21px;
  overflow: hidden;
 }
 .siteNoticeBig .notice-thermometer-end {
  float: left;
  background-image: url(http://upload.wikimedia.org/centralnotice/images/2009/thermometer.png);
  background-position: right bottom;
  width: 10px;
  height: 21px;
 }

.siteNoticeSmallAnon {
 position: relative;
 float: left;
 width: 100%;
 border: solid 1px silver;
 background-color: #f3f3f3;
 text-align: center;
 padding: 0.1em 0;
 margin-bottom: 1em;
}
 .siteNoticeSmallAnon .notice-toggle {
  float: right;
  font-size: 0.75em;
  padding-right: 0.5em;
 }
 .siteNoticeSmallAnon .notice-slogan {
  padding-left: 0.5em;
 }
.siteNoticeSmallUser {
 position: relative;
 float: left;
 width: 100%;
 text-align: center;
 margin-bottom: 1em;
}
 .siteNoticeSmallUser .notice-toggle {
  float: right;
  font-size: 0.75em;
 }

</style>
<script>
/* @param mode string to be appended to the utm_source paramter like "utm_source=[notice]_[mode]" */
function goToDonationPage( mode ) {
 var url = 'http://meta.wikimedia.org/wiki/Special:GeoLite?lang=en&&utm_medium=sitenotice&utm_campaign=fundraiser2009&utm_source=2009_Notice30_bold';
 if ( mode && mode.length ) { 
  url += '_' + mode;
 }
 var targets = String( 'Support_Wikipedia2' ).split(',');
 if ( targets.length ) {
  url += '&target=' + targets[Math.floor( Math.random() * targets.length )].replace(/^\s+|\s+$/, '');
 }
 window.location = url;
}
// Set thermometer sizes
var maxPixels = 406;
var range = parseInt( '7500000' );
var value = parseInt( '1676000' );
var fill = parseInt( maxPixels * ( ( 1 / range ) * value ) );
var base = maxPixels - fill;
appendCSS('\
 .siteNoticeBig .notice-thermometer-fill { width: ' + fill + 'px; }\
 .siteNoticeBig .notice-thermometer-base { width: ' + base + 'px; }\
');
</script>
<div class="notice-all siteNoticeBig" align="center">
 <a class="notice-pitch" href="javascript:goToDonationPage()">
  <div class="notice-pitch-text">
   <span class="notice-pitch-text-big">Wikipedia is there when you need it — now it needs you.</span>
   <div class="notice-thermometer">
    <div class="notice-thermometer-start"></div>
    <div class="notice-thermometer-fill">$1.4M USD</div>
    <div class="notice-thermometer-transition"></div>
    <div class="notice-thermometer-base">$7.5M USD</div>
    <div class="notice-thermometer-end"></div>
    <div style="clear: both;"></div>
   </div>
  </div>
  <div style="clear: both;"></div>
 </a>
 <div class="notice-button"><div class="notice-button-start"></div><a href="javascript:goToDonationPage()">Donate Now</a><div class="notice-button-end"></div></div>
 <div class="notice-toggle">[<a href="#" onclick="toggleNotice();return false"><span>Hide</span></a>]</div>
 <div style="clear: both;"></div>
</div>
<div class="notice-all siteNoticeSmallAnon">
 <div class="notice-toggle">[<a href="#" onclick="toggleNotice()"><span>Show</span></a>]</div>
 <a class="notice-slogan" href="javascript:goToDonationPage('collapsed')">
  <span>Wikipedia</span>
  <img src="SKI_combinator_calculus_arquivos/Wikipedia-logo-small_Fundraising_2009.png" alt="">
  <span>Forever</span>
 </a>
 <span>Our shared knowledge. Our shared treasure.</span>
 <a href="javascript:goToDonationPage('collapsed')">
  <span>Help us protect it.</span>
 </a>
 <div style="clear: both;"></div>
</div>
<div class="notice-all siteNoticeSmallUser">
 <div class="notice-toggle">[<a href="#" onclick="toggleNotice()"><span>Show</span></a>]</div>
 <a class="notice-slogan" href="javascript:goToDonationPage('collapsed')">
  <span>Wikipedia</span>
  <img src="SKI_combinator_calculus_arquivos/Wikipedia-logo-small_Fundraising_2009.png" alt="">
  <span>Forever</span>
 </a>
 <span>Our shared knowledge. Our shared treasure.</span>
 <a href="javascript:goToDonationPage('collapsed')">
  <span>Help us protect it.</span>
 </a>
 <div style="clear: both;"></div>
</div>
<div style="clear: both;"></div></div>
</div>		<h1 id="firstHeading" class="firstHeading">SKI combinator calculus</h1>
		<div id="bodyContent">
			<h3 id="siteSub">From Wikipedia, the free encyclopedia</h3>
			<div id="contentSub"></div>
									<div id="jump-to-nav">Jump to: <a href="#column-one">navigation</a>, <a href="#searchInput">search</a></div>			<!-- start content -->
			<table class="metadata plainlinks ambox ambox-move" style="">
<tbody><tr>
<td class="mbox-image">
<div style="width: 52px;"><a href="http://en.wikipedia.org/wiki/File:Merge-arrow.svg" class="image"><img alt="Merge-arrow.svg" src="SKI_combinator_calculus_arquivos/50px-Merge-arrow.png" height="20" width="50"></a></div>
</td>
<td class="mbox-text" style="">It has been suggested that this article or section be <a href="http://en.wikipedia.org/wiki/Wikipedia:Merging" title="Wikipedia:Merging">merged</a> into <i><a href="http://en.wikipedia.org/wiki/Combinatory_logic" title="Combinatory logic">Combinatory logic</a></i>. (<a href="http://en.wikipedia.org/wiki/Talk:Combinatory_logic#Merger_proposal" title="Talk:Combinatory logic">Discuss</a>)</td>
</tr>
</tbody></table>
<p><b>SKI combinator calculus</b> is a <a href="http://en.wikipedia.org/wiki/Model_of_computation" title="Model of computation">computational system</a> that may be perceived as a reduced version of untyped <a href="http://en.wikipedia.org/wiki/Lambda_calculus" title="Lambda calculus">Lambda calculus</a>.</p>
<p>All operations in Lambda calculus are expressed in SKI as <a href="http://en.wikipedia.org/wiki/Binary_trees" title="Binary trees" class="mw-redirect">binary trees</a> whose leaves are one of the three symbols <b>S</b>, <b>K</b>, and <b>I</b> (called <b>combinators</b>). In fact, the symbol <b>I</b> is added only for convenience, and just the other two suffice for all of the purposes of the SKI system.</p>
<p>Although the most formal representation of the objects in this
system requires binary trees, they are usually represented, for
typesettability, as parenthesized expressions, either with all the
subtrees parenthesized, or only the right-side children subtrees
parenthesized. So, the tree whose left subtree is the tree KS and whose
right subtree is the tree SK is usually typed as <b>((KS)(SK))</b>, or more simply as <b>KS(SK)</b>, instead of being fully drawn as a tree (as formality and readability would require).</p>
<table id="toc" class="toc">
<tbody><tr>
<td>
<div id="toctitle">
<h2>Contents</h2>
 <span class="toctoggle">[<a href="javascript:toggleToc()" class="internal" id="togglelink">hide</a>]</span></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="#Informal_description"><span class="tocnumber">1</span> <span class="toctext">Informal description</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="#Formal_definition"><span class="tocnumber">2</span> <span class="toctext">Formal definition</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="#SKI_expressions"><span class="tocnumber">3</span> <span class="toctext">SKI expressions</span></a>
<ul>
<li class="toclevel-2 tocsection-4"><a href="#Self-application_and_recursion"><span class="tocnumber">3.1</span> <span class="toctext">Self-application and recursion</span></a></li>
<li class="toclevel-2 tocsection-5"><a href="#The_reversal_expression"><span class="tocnumber">3.2</span> <span class="toctext">The reversal expression</span></a></li>
<li class="toclevel-2 tocsection-6"><a href="#Boolean_logic"><span class="tocnumber">3.3</span> <span class="toctext">Boolean logic</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-7"><a href="#Connection_to_intuitionistic_logic"><span class="tocnumber">4</span> <span class="toctext">Connection to intuitionistic logic</span></a></li>
<li class="toclevel-1 tocsection-8"><a href="#See_also"><span class="tocnumber">5</span> <span class="toctext">See also</span></a></li>
<li class="toclevel-1 tocsection-9"><a href="#References"><span class="tocnumber">6</span> <span class="toctext">References</span></a></li>
<li class="toclevel-1 tocsection-10"><a href="#External_links"><span class="tocnumber">7</span> <span class="toctext">External links</span></a></li>
</ul>
</td>
</tr>
</tbody></table>
<script type="text/javascript">
//<![CDATA[
if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } 
//]]>
</script>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=1" title="Edit section: Informal description">edit</a>]</span> <span class="mw-headline" id="Informal_description">Informal description</span></h2>
<p>Informally, and using programming language jargon, a tree <b>(xy)</b>
can be thought of as a "function" x applied to an "argument" y. When
"evaluated" (i.e., when the function is "applied" to the argument), the
tree "returns a value". i.e., transforms into another tree. Of course,
all three of the "function", the "argument" and the "value" are either
combinators, or binary trees, and if they are binary trees they too may
be thought of as functions whenever the need arises.</p>
<p>The <b>evaluation</b> operation is defined as follows:</p>
<p>(<i>x</i>, <i>y</i>, and <i>z</i> represent expressions made from the functions <b>S</b>, <b>K</b>, and <b>I</b>, and set values):</p>
<p><b>I</b> returns its argument:</p>
<dl>
<dd><b>I</b><i>x</i> → <i>x</i></dd>
</dl>
<p><b>K</b>, when applied to any argument x, yields a one-argument constant function Kx , which, when applied to any argument, returns x:</p>
<dl>
<dd><b>K</b><i>xy</i> → <i>x</i></dd>
</dl>
<p><b>S</b> is a substitution operator. It takes three arguments and
then returns the first argument applied to the third, which is then
applied to the result of the second argument applied to the third. More
clearly:</p>
<dl>
<dd><b>S</b><i>xyz</i> → <i>xz</i>(<i>yz</i>)</dd>
</dl>
<p>Example computation: SKSK evaluates to KK(SK) by the S-rule. Then if
we evaluate KK(SK), we get K by the K-rule. As no further rule can be
applied, the computation halts here.</p>
<p>Note that, for all trees x and all trees y, SKxy will always
evaluate to y in two steps, and the ultimate result of evaluating SKxy
will always equal the result of evaluating y. We say that SKx and I are
"functionally equivalent" because they always yield the same result
when applied to any y.</p>
<p>Note that from these definitions it can be shown that SKI calculus
is not the minimum system that can fully perform the computations of
Lambda calculus, as all occurrences of <b>I</b> in any expression can
be replaced by (SKK) or (SKS) or (S K whatever) and the resulting
expression will yield the same result. So the "I" is merely syntactic
sugar.</p>
<p>In fact, it is possible to define a complete system using only one combinator. An example is Chris Barker's <a href="http://barker.linguistics.fas.nyu.edu/Stuff/Iota/" class="external text" rel="nofollow">iota</a> combinator, defined as follows:</p>
<dl>
<dd>ι<i>x</i> = <i>x</i><b>SK</b></dd>
</dl>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=2" title="Edit section: Formal definition">edit</a>]</span> <span class="mw-headline" id="Formal_definition">Formal definition</span></h2>
<p>The terms and derivations in this system can also be more formally defined:</p>
<p><b>Terms</b>: The set <i>T</i> of terms is defined recursively by the following rules.</p>
<ol>
<li><b>S</b>, <b>K</b>, and <b>I</b> are terms.</li>
<li>If τ<sub>1</sub> and τ<sub>2</sub> are terms, then (τ<sub>1</sub>τ<sub>2</sub>) is a term.</li>
<li>Nothing is a term if not required to be so by the first two rules.</li>
</ol>
<p><b>Derivations</b>: A derivation is a finite sequence of terms
defined recursively by the following rules (where all Greek letters
represent valid terms or expressions with fully balanced parentheses):</p>
<ol>
<li>If Δ is a derivation ending in an expression of the form α(<b>I</b>β)ι, then Δ followed by the term αβι is a derivation.</li>
<li>If Δ is a derivation ending in an expression of the form α((<b>K</b>β)γ)ι, then Δ followed by the term αβι is a derivation.</li>
<li>If Δ is a derivation ending in an expression of the form α(((<b>S</b>β)γ)δ)ι, then Δ followed by the term α((βδ)(γδ))ι is a derivation.</li>
</ol>
<p>Assuming a sequence is a valid derivation to begin with, it can be extended using these rules. <a href="http://people.cs.uchicago.edu/%7Eodonnell/Teacher/Lectures/Formal_Organization_of_Knowledge/Examples/combinator_calculus/" class="external autonumber" rel="nofollow">[1]</a></p>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=3" title="Edit section: SKI expressions">edit</a>]</span> <span class="mw-headline" id="SKI_expressions">SKI expressions</span></h2>
<h3><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=4" title="Edit section: Self-application and recursion">edit</a>]</span> <span class="mw-headline" id="Self-application_and_recursion">Self-application and recursion</span></h3>
<p><b>SII</b> is an expression that takes an argument and applies that argument to itself:</p>
<dl>
<dd><b>SII</b>α → <b>I</b>α(<b>I</b>α) → αα</dd>
</dl>
<p>One interesting property of this is that it makes the expression <b>SII</b>(<b>SII</b>) irreducible:</p>
<dl>
<dd><b>SII</b>(<b>SII</b>) → <b>I</b>(<b>SII</b>)(<b>I</b>(<b>SII</b>)) → <b>I</b>(<b>SII</b>)(<b>SII</b>) → <b>SII</b>(<b>SII</b>)</dd>
</dl>
<p>Another thing that results from this is that it allows you to write
a function that applies something to the self application of something
else:</p>
<dl>
<dd>(<b>S</b>(<b>K</b>α)(<b>SII</b>))β → <b>K</b>αβ(<b>SII</b>β) → α(<b>SII</b>β) → α(ββ)</dd>
</dl>
<p>This function can be used to achieve <a href="http://en.wikipedia.org/wiki/Recursion" title="Recursion">recursion</a>.
If β is the function that applies α to the self application of
something else, then self-applying β performs α recursively on ββ. More
clearly, if:</p>
<dl>
<dd>β = <b>S</b>(<b>K</b>α)(<b>SII</b>)</dd>
</dl>
<p>then:</p>
<dl>
<dd><b>SII</b>β → ββ → α(ββ) → α(α(ββ)) → …</dd>
</dl>
<h3><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=5" title="Edit section: The reversal expression">edit</a>]</span> <span class="mw-headline" id="The_reversal_expression">The reversal expression</span></h3>
<p><b>S</b>(<b>K</b>(<b>SI</b>))<b>K</b> reverses the following two terms:</p>
<dl>
<dd><b>S</b>(<b>K</b>(<b>SI</b>))<b>K</b>αβ →</dd>
<dd><b>K</b>(<b>SI</b>)α(<b>K</b>α)β →</dd>
<dd><b>SI</b>(<b>K</b>α)β →</dd>
<dd><b>I</b>β(<b>K</b>αβ) →</dd>
<dd><b>I</b>βα → βα</dd>
</dl>
<h3><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=6" title="Edit section: Boolean logic">edit</a>]</span> <span class="mw-headline" id="Boolean_logic">Boolean logic</span></h3>
<p>SKI combinator calculus can also implement <a href="http://en.wikipedia.org/wiki/Boolean_logic" title="Boolean logic">Boolean logic</a> in the form of an if-then-else structure. An if-then-else structure consists of a Boolean expression that is either <b>T</b> (True) or <b>F</b> (False) and two arguments, such that:</p>
<dl>
<dd><b>T</b><i>xy</i> → <i>x</i></dd>
</dl>
<p>and</p>
<dl>
<dd><b>F</b><i>xy</i> → <i>y</i></dd>
</dl>
<p>The key is in defining the two Boolean expressions. The first works just like one of our basic combinators:</p>
<dl>
<dd><b>T</b> = <b>K</b></dd>
<dd><b>K</b><i>xy</i> → <i>x</i></dd>
</dl>
<p>The second is also fairly simple:</p>
<dl>
<dd><b>F</b> = <b>KI</b></dd>
<dd><b>KI</b>xy <i>→ <b>I</b></i>y <i>→</i> y</dd>
</dl>
<p>Once True and False are defined, all Boolean logic can be implemented in terms of if-then-else structures.</p>
<p>Boolean NOT (which returns the opposite of a given boolean) works
the same as the if-then-else structure, with False and True as the
second and third values, so it can be implemented as a postfix
operation:</p>
<dl>
<dd>NOT = (<b>F</b>)(<b>T</b>) = (<b>KI</b>)(<b>K</b>)</dd>
</dl>
<p>If this is put in an if-then-else structure, it can be shown that this has the expected result</p>
<dl>
<dd>(<b>T</b>)NOT=<b>T</b>(<b>F</b>)(<b>T</b>)=<b>F</b></dd>
<dd>(<b>F</b>)NOT=<b>F</b>(<b>F</b>)(<b>T</b>)=<b>T</b></dd>
</dl>
<p>Boolean OR (which returns True if either of the two Boolean values
surrounding it is True) works the same as an if-then-else structure
with True as the second value, so it can be implemented as an infix
operation:</p>
<dl>
<dd>OR = <b>T</b> = <b>K</b></dd>
</dl>
<p>If this is put in an if-then-else structure, it can be shown that this has the expected result:</p>
<dl>
<dd>(<b>T</b>)OR(<b>T</b>)=<b>T</b>(<b>T</b>)(<b>T</b>)=<b>T</b></dd>
<dd>(<b>T</b>)OR(<b>F</b>)=<b>T</b>(<b>T</b>)(<b>F</b>)=<b>T</b></dd>
<dd>(<b>F</b>)OR(<b>T</b>)=<b>F</b>(<b>T</b>)(<b>T</b>)=<b>T</b></dd>
<dd>(<b>F</b>)OR(<b>F</b>)=<b>F</b>(<b>T</b>)(<b>F</b>)=<b>F</b></dd>
</dl>
<p>Boolean AND (which returns True if both of the two Boolean values
surrounding it are True) works the same as an if-then-else structure
with False as the third value, so it can be implemented as a postfix
operation:</p>
<dl>
<dd>AND = <b>F</b> = <b>KI</b></dd>
</dl>
<p>If this is put in an if-then-else structure, it can be shown that this has the expected result:</p>
<dl>
<dd>(<b>T</b>)(<b>T</b>)AND=<b>T</b>(<b>T</b>)(<b>F</b>)=<b>T</b></dd>
<dd>(<b>T</b>)(<b>F</b>)AND=<b>T</b>(<b>F</b>)(<b>F</b>)=<b>F</b></dd>
<dd>(<b>F</b>)(<b>T</b>)AND=<b>F</b>(<b>T</b>)(<b>F</b>)=<b>F</b></dd>
<dd>(<b>F</b>)(<b>F</b>)AND=<b>F</b>(<b>F</b>)(<b>F</b>)=<b>F</b></dd>
</dl>
<p>Because this defines True, False, NOT (as a postfix operator), OR
(as an infix operator), and AND (as a postfix operator) in terms of SKI
notation, this proves that the SKI system can fully express Boolean
logic.</p>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=7" title="Edit section: Connection to intuitionistic logic">edit</a>]</span> <span class="mw-headline" id="Connection_to_intuitionistic_logic">Connection to intuitionistic logic</span></h2>
<p>The combinators <b>K</b> and <b>S</b> correspond to two well-known axioms of <a href="http://en.wikipedia.org/wiki/Sentential_logic" title="Sentential logic" class="mw-redirect">sentential logic</a>:</p>
<p><b>AK</b>: <i>A</i> → (<i>B</i> → <i>A</i>),<br>
<b>AS</b>: (<i>A</i> → (<i>B</i> → <i>C</i>)) → ((<i>A</i> → <i>B</i>) → (<i>A</i> → <i>C</i>)).</p>
<p>Function application corresponds to the rule <a href="http://en.wikipedia.org/wiki/Modus_ponens" title="Modus ponens">modus ponens</a>:</p>
<p><b>MP</b>: from <i>A</i> and <i>A</i> → <i>B</i> infer <i>B</i>.</p>
<p>The axioms <b>AK</b> and <b>AS</b>, and the rule <b>MP</b> are complete for the implicational fragment of <a href="http://en.wikipedia.org/wiki/Intuitionistic_logic" title="Intuitionistic logic">intuitionistic logic</a>. In order for combinatory logic to have as a model:</p>
<ul>
<li>The <a href="http://en.wikipedia.org/wiki/Implicational_propositional_calculus" title="Implicational propositional calculus">implicational fragment</a> of <a href="http://en.wikipedia.org/wiki/Classical_logic" title="Classical logic">classical logic</a>, would require the combinatory analog to the <a href="http://en.wikipedia.org/wiki/Law_of_excluded_middle" title="Law of excluded middle">law of excluded middle</a>, e.g., <a href="http://en.wikipedia.org/wiki/Peirce%27s_law" title="Peirce's law">Peirce's law</a>;</li>
<li><a href="http://en.wikipedia.org/wiki/Sentential_logic" title="Sentential logic" class="mw-redirect">Complete classical logic</a>, would require the combinatory analog to the sentential axiom <b>F</b> → <i>A</i>.</li>
</ul>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=8" title="Edit section: See also">edit</a>]</span> <span class="mw-headline" id="See_also">See also</span></h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Combinatory_logic" title="Combinatory logic">Combinatory logic</a></li>
<li><a href="http://en.wikipedia.org/wiki/B,C,K,W_system" title="B,C,K,W system">B,C,K,W system</a></li>
<li><a href="http://en.wikipedia.org/wiki/Fixed_point_combinator" title="Fixed point combinator">Fixed point combinator</a></li>
<li><a href="http://en.wikipedia.org/wiki/Lambda_calculus" title="Lambda calculus">Lambda calculus</a></li>
<li><a href="http://en.wikipedia.org/wiki/Functional_programming" title="Functional programming">Functional programming</a></li>
<li><a href="http://en.wikipedia.org/wiki/Unlambda" title="Unlambda">Unlambda</a> programming language</li>
<li><a href="http://en.wikipedia.org/wiki/To_Mock_a_Mockingbird" title="To Mock a Mockingbird">To Mock a Mockingbird</a></li>
</ul>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=9" title="Edit section: References">edit</a>]</span> <span class="mw-headline" id="References">References</span></h2>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Raymond_Smullyan" title="Raymond Smullyan">Smullyan, Raymond</a>, 1985. <i><a href="http://en.wikipedia.org/wiki/To_Mock_a_Mockingbird" title="To Mock a Mockingbird">To Mock a Mockingbird</a></i>. Knopf. <a href="http://en.wikipedia.org/wiki/Special:BookSources/0394534913" class="internal mw-magiclink-isbn">ISBN 0-394-53491-3</a>. A gentle introduction to combinatory logic, presented as a series of recreational puzzles using bird watching metaphors.</li>
<li>--------, 1994. <i>Diagonalization and Self-Reference</i>. Oxford
Univ. Press. Chpts. 17-20 are a more formal introduction to combinatory
logic, with a special emphasis on fixed point results.</li>
</ul>
<h2><span class="editsection">[<a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit&amp;section=10" title="Edit section: External links">edit</a>]</span> <span class="mw-headline" id="External_links">External links</span></h2>
<ul>
<li>O'Donnell, Mike "<a href="http://people.cs.uchicago.edu/%7Eodonnell/Teacher/Lectures/Formal_Organization_of_Knowledge/Examples/combinator_calculus/" class="external text" rel="nofollow">The SKI Combinator Calculus as a Universal System.</a>"</li>
<li>Keenan, David C. (2001) "<a href="http://dkeenan.com/Lambda/index.htm" class="external text" rel="nofollow">To Dissect a Mockingbird.</a>"</li>
<li>Rathman, Chris, "<a href="http://www.angelfire.com/tx4/cus/combinator/birds.html" class="external text" rel="nofollow">Combinator Birds.</a>"</li>
<li>"<a href="http://cstein.kings.cam.ac.uk/%7Echris/combinators.html" class="external text" rel="nofollow">"Drag 'n' Drop Combinators (Java Applet).</a>"</li>
</ul>


<!-- 
NewPP limit report
Preprocessor node count: 284/1000000
Post-expand include size: 2731/2048000 bytes
Template argument size: 1010/2048000 bytes
Expensive parser function count: 1/500
-->

<!-- Saved in parser cache with key enwiki:pcache:idhash:1232841-0!1!0!default!!en!2 and timestamp 20091123121827 -->
<div class="printfooter">
Retrieved from "<a href="http://en.wikipedia.org/wiki/SKI_combinator_calculus">http://en.wikipedia.org/wiki/SKI_combinator_calculus</a>"</div>
			<div id="catlinks" class="catlinks"><div id="mw-normal-catlinks"><a href="http://en.wikipedia.org/wiki/Special:Categories" title="Special:Categories">Categories</a>: <span dir="ltr"><a href="http://en.wikipedia.org/wiki/Category:Lambda_calculus" title="Category:Lambda calculus">Lambda calculus</a></span> | <span dir="ltr"><a href="http://en.wikipedia.org/wiki/Category:Combinatory_logic" title="Category:Combinatory logic">Combinatory logic</a></span></div><div id="mw-hidden-catlinks" class="mw-hidden-cats-hidden">Hidden categories: <span dir="ltr"><a href="http://en.wikipedia.org/wiki/Category:Articles_to_be_merged_from_January_2008" title="Category:Articles to be merged from January 2008">Articles to be merged from January 2008</a></span> | <span dir="ltr"><a href="http://en.wikipedia.org/wiki/Category:All_articles_to_be_merged" title="Category:All articles to be merged">All articles to be merged</a></span></div></div>			<!-- end content -->
						<div class="visualClear"></div>
		</div>
	</div>
		</div>
		<div id="column-one">
	<div id="p-cactions" class="portlet">
		<h5>Views</h5>
		<div class="pBody">
			<ul xml:lang="en" lang="en">
	
				 <li id="ca-nstab-main" class="selected"><a href="http://en.wikipedia.org/wiki/SKI_combinator_calculus" title="View the content page [alt-shift-c]" accesskey="c">Article</a></li>
				 <li id="ca-talk"><a href="http://en.wikipedia.org/wiki/Talk:SKI_combinator_calculus" title="Discussion about the content page [alt-shift-t]" accesskey="t">Discussion</a></li>
				 <li id="ca-edit"><a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=edit" title="You can edit this page. 
Please use the preview button before saving. [alt-shift-e]" accesskey="e">Edit this page</a></li>
				 <li id="ca-history"><a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;action=history" title="Past versions of this page [alt-shift-h]" accesskey="h">History</a></li>			</ul>
		</div>
	</div>
	<div class="portlet" id="p-personal">
		<h5>Personal tools</h5>
		<div class="pBody">
			<ul xml:lang="en" lang="en">
				<li id="pt-optin-try"><a href="http://en.wikipedia.org/w/index.php?title=Special:UsabilityInitiativeOptIn&amp;from=SKI_combinator_calculus" title="Try out new features" class="no-text-transform">Try Beta</a></li>
				<li id="pt-login"><a href="http://en.wikipedia.org/w/index.php?title=Special:UserLogin&amp;returnto=SKI_combinator_calculus" title="You are encouraged to log in; however, it is not mandatory. [alt-shift-o]" accesskey="o">Log in / create account</a></li>
			</ul>
		</div>
	</div>
	<div class="portlet" id="p-logo">
		<a style="background-image: url(http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png);" href="http://en.wikipedia.org/wiki/Main_Page" title="Visit the main page"></a>
	</div>
	<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
	<div class="generated-sidebar portlet" id="p-navigation">
		<h5 xml:lang="en" lang="en">Navigation</h5>
		<div class="pBody">
			<ul>
				<li id="n-mainpage-description"><a href="http://en.wikipedia.org/wiki/Main_Page" title="Visit the main page [alt-shift-z]" accesskey="z">Main page</a></li>
				<li id="n-contents"><a href="http://en.wikipedia.org/wiki/Portal:Contents" title="Guides to browsing Wikipedia">Contents</a></li>
				<li id="n-featuredcontent"><a href="http://en.wikipedia.org/wiki/Portal:Featured_content" title="Featured content — the best of Wikipedia">Featured content</a></li>
				<li id="n-currentevents"><a href="http://en.wikipedia.org/wiki/Portal:Current_events" title="Find background information on current events">Current events</a></li>
				<li id="n-randompage"><a href="http://en.wikipedia.org/wiki/Special:Random" title="Load a random article [alt-shift-x]" accesskey="x">Random article</a></li>
			</ul>
		</div>
	</div>
	<div id="p-search" class="portlet">
		<h5 xml:lang="en" lang="en"><label for="searchInput">Search</label></h5>
		<div id="searchBody" class="pBody">
			<form action="/w/index.php" id="searchform">
				<input name="title" value="Special:Search" type="hidden">
				<input autocomplete="off" id="searchInput" title="Search Wikipedia" accesskey="f" name="search">
				<input name="go" class="searchButton" id="searchGoButton" value="Go" title="Go to a page with this exact name if one exists" type="submit">&nbsp;
				<input name="fulltext" class="searchButton" id="mw-searchButton" value="Search" title="Search Wikipedia for this text" type="submit">
			</form>
		</div>
	</div>
	<div class="generated-sidebar portlet" id="p-interaction">
		<h5 xml:lang="en" lang="en">Interaction</h5>
		<div class="pBody">
			<ul>
				<li id="n-aboutsite"><a href="http://en.wikipedia.org/wiki/Wikipedia:About" title="Find out about Wikipedia">About Wikipedia</a></li>
				<li id="n-portal"><a href="http://en.wikipedia.org/wiki/Wikipedia:Community_portal" title="About the project, what you can do, where to find things">Community portal</a></li>
				<li id="n-recentchanges"><a href="http://en.wikipedia.org/wiki/Special:RecentChanges" title="The list of recent changes in the wiki [alt-shift-r]" accesskey="r">Recent changes</a></li>
				<li id="n-contact"><a href="http://en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia">Contact Wikipedia</a></li>
				<li id="n-sitesupport"><a href="http://wikimediafoundation.org/wiki/Support_Wikipedia/en" title="Support us">Donate to Wikipedia</a></li>
				<li id="n-help"><a href="http://en.wikipedia.org/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia">Help</a></li>
			</ul>
		</div>
	</div>
	<div class="portlet" id="p-tb">
		<h5 xml:lang="en" lang="en">Toolbox</h5>
		<div class="pBody">
			<ul>
				<li id="t-whatlinkshere"><a href="http://en.wikipedia.org/wiki/Special:WhatLinksHere/SKI_combinator_calculus" title="List of all English Wikipedia pages containing links to this page [alt-shift-j]" accesskey="j">What links here</a></li>
				<li id="t-recentchangeslinked"><a href="http://en.wikipedia.org/wiki/Special:RecentChangesLinked/SKI_combinator_calculus" title="Recent changes in pages linked from this page [alt-shift-k]" accesskey="k">Related changes</a></li>
<li id="t-upload"><a href="http://en.wikipedia.org/wiki/Wikipedia:Upload" title="Upload files [alt-shift-u]" accesskey="u">Upload file</a></li>
<li id="t-specialpages"><a href="http://en.wikipedia.org/wiki/Special:SpecialPages" title="List of all special pages [alt-shift-q]" accesskey="q">Special pages</a></li>
				<li id="t-print"><a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;printable=yes" rel="alternate" title="Printable version of this page [alt-shift-p]" accesskey="p">Printable version</a></li>				<li id="t-permalink"><a href="http://en.wikipedia.org/w/index.php?title=SKI_combinator_calculus&amp;oldid=326827661" title="Permanent link to this revision of the page">Permanent link</a></li><li id="t-cite"><a href="http://en.wikipedia.org/w/index.php?title=Special:Cite&amp;page=SKI_combinator_calculus&amp;id=326827661" title="Information on how to cite this page">Cite this page</a></li>			</ul>
		</div>
	</div>
	<div id="p-lang" class="portlet">
		<h5 xml:lang="en" lang="en">Languages</h5>
		<div class="pBody">
			<ul>
				<li class="interwiki-hr"><a href="http://hr.wikipedia.org/wiki/SKI_kombinatorni_ra%C4%8Dun">Hrvatski</a></li>
				<li class="interwiki-zh"><a href="http://zh.wikipedia.org/wiki/SKI%E7%BB%84%E5%90%88%E5%AD%90%E6%BC%94%E7%AE%97">中文</a></li>
			</ul>
		</div>
	</div>
		</div><!-- end of the left (by default at least) column -->
			<div class="visualClear"></div>
			<div id="footer">
				<div id="f-poweredbyico"><a href="http://www.mediawiki.org/"><img src="SKI_combinator_calculus_arquivos/poweredby_mediawiki_88x31.png" alt="Powered by MediaWiki" height="31" width="88"></a></div>
				<div id="f-copyrightico"><a href="http://wikimediafoundation.org/"><img src="SKI_combinator_calculus_arquivos/wikimedia-button.png" alt="Wikimedia Foundation" height="31" width="88"></a></div>
			<ul id="f-list">
					<li id="lastmod"> This page was last modified on 19 November 2009 at 23:36.</li>
					<li id="copyright">Text is available under the <a rel="license" href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License">Creative Commons Attribution-ShareAlike License</a><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/" style="display: none;"></a>;
additional terms may apply.
See <a href="http://wikimediafoundation.org/wiki/Terms_of_Use">Terms of Use</a> for details.<br>
Wikipedia® is a registered trademark of the <a href="http://www.wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li><li><a class="internal" href="http://en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact us</a></li>
					<li id="privacy"><a href="http://wikimediafoundation.org/wiki/Privacy_policy" title="wikimedia:Privacy policy">Privacy policy</a></li>
					<li id="about"><a href="http://en.wikipedia.org/wiki/Wikipedia:About" title="Wikipedia:About">About Wikipedia</a></li>
					<li id="disclaimer"><a href="http://en.wikipedia.org/wiki/Wikipedia:General_disclaimer" title="Wikipedia:General disclaimer">Disclaimers</a></li>
			</ul>
		</div>
</div>

<script type="text/javascript">if (window.runOnloadHook) runOnloadHook();</script>
<!-- Served by srv227 in 0.270 secs. --></body><script type="text/javascript"><!--
function __RP_Callback_Helper(str, strCallbackEvent, splitSize, func){var event = null;if (strCallbackEvent){event = document.createEvent('Events');event.initEvent(strCallbackEvent, true, true);}if (str && str.length > 0){var splitList = str.split('|');var strCompare = str;if (splitList.length == splitSize)strCompare = splitList[splitSize-1];var pluginList = document.plugins;for (var count = 0; count < pluginList.length; count++){var sSrc = '';if (pluginList[count] && pluginList[count].src)sSrc = pluginList[count].src;if (strCompare.length >= sSrc.length){if (strCompare.indexOf(sSrc) != -1){func(str, count, pluginList, splitList);break;}}}}if (strCallbackEvent)document.body.dispatchEvent(event);}function __RP_Coord_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_Coord_Callback = str;pluginList[index].__RP_Coord_Callback_Left = splitList[0];pluginList[index].__RP_Coord_Callback_Top = splitList[1];pluginList[index].__RP_Coord_Callback_Right = splitList[2];pluginList[index].__RP_Coord_Callback_Bottom = splitList[3];};__RP_Callback_Helper(str, 'rp-js-coord-callback', 5, func);}function __RP_Url_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_Url_Callback = str;pluginList[index].__RP_Url_Callback_Vid = splitList[0];pluginList[index].__RP_Url_Callback_Parent = splitList[1];};__RP_Callback_Helper(str, 'rp-js-url-callback', 3, func);}function __RP_TotalBytes_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_TotalBytes_Callback = str;pluginList[index].__RP_TotalBytes_Callback_Bytes = splitList[0];};__RP_Callback_Helper(str, null, 2, func);}function __RP_Connection_Callback(str){var func = function(str, index, pluginList, splitList){pluginList[index].__RP_Connection_Callback = str;pluginList[index].__RP_Connection_Callback_Url = splitList[0];};__RP_Callback_Helper(str, null, 2, func);}
//--></script></html>